#!/usr/bin/env python2.5

import os
import shutil
import sqlite3
import sys

SCREENS = 5
COLUMNS = 4
ROWS = 4
CELL_SIZE = 110

DIR = "db_files"
AUTO_FILE = "launcher.db"

APPLICATION_COMPONENTS = [
    "com.android.calculator2/com.android.calculator2.Calculator",
    "com.android.providers.downloads.ui/com.android.providers.downloads.ui.DownloadList",
    "com.android.settings/com.android.settings.MxSettings",
    "com.android.mms/com.android.mms.ui.ConversationList",
    "com.android.contacts/com.android.contacts.activities.PeopleActivity",
    "com.android.dialer/com.android.dialer.DialtactsActivity"
]


def usage():
    print "usage: fill_screens.py -- fills up the launcher db"


def make_dir():
    shutil.rmtree(DIR, True)
    os.makedirs(DIR)


def pull_file(fn):
    print "pull_file: " + fn
    rv = os.system("adb pull"
                   + " /data/data/com.android.launcher/databases/launcher.db"
                   + " " + fn);
    if rv != 0:
        print "adb pull failed"
        sys.exit(1)


def push_file(fn):
    print "push_file: " + fn
    rv = os.system("adb push"
                   + " " + fn
                   + " /data/data/com.android.launcher/databases/launcher.db")
    if rv != 0:
        print "adb push failed"
        sys.exit(1)


def process_file(fn):
    print "process_file: " + fn
    conn = sqlite3.connect(fn)
    c = conn.cursor()
    c.execute("DELETE FROM favorites")

    intentFormat = "#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=%s;end"

    id = 0;
    for s in range(SCREENS):
        for x in range(ROWS):
            for y in range(COLUMNS):
                id += 1
                insert = "INSERT into favorites (_id, title, intent, container, screen, cellX, cellY, spanX, spanY, itemType, appWidgetId, iconType) VALUES (%d, '%s', '%s', %d, %d, %d, %d, %d, %d, %d, %d, %d)"
                insert = insert % (id, "title", "", -100, s, x, y, 1, 1, 2, -1, 0)
                c.execute(insert)
                folder_id = id

                for z in range(15):
                    id += 1
                    intent = intentFormat % (
                    APPLICATION_COMPONENTS[id % len(APPLICATION_COMPONENTS)])
                    insert = "INSERT into favorites (_id, title, intent, container, screen, cellX, cellY, spanX, spanY, itemType, appWidgetId, iconType) VALUES (%d, '%s', '%s', %d, %d, %d, %d, %d, %d, %d, %d, %d)"
                    insert = insert % (id, "title", intent, folder_id, 0, 0, 0, 1, 1, 0, -1, 0)
                    c.execute(insert)

    conn.commit()
    c.close()


def main(argv):
    if len(argv) == 1:
        make_dir()
        pull_file(AUTO_FILE)
        process_file(AUTO_FILE)
        push_file(AUTO_FILE)
    else:
        usage()


if __name__ == "__main__":
    main(sys.argv)
